package com.pai4j.message.core.template;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;

/**
 * 模板上下文
 * 封装模板渲染所需的变量和配置
 *
 * @author PAI4J Team
 * @date 2025-11-01
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TemplateContext {

    /**
     * 模板ID或内容
     */
    private String template;

    /**
     * 模板变量
     */
    @Builder.Default
    private Map<String, Object> variables = new HashMap<>();

    /**
     * 模板类型（用于选择模板引擎）
     */
    private String templateType;

    /**
     * 是否缓存模板
     */
    @Builder.Default
    private boolean cache = true;

    /**
     * 添加变量
     */
    public TemplateContext addVariable(String key, Object value) {
        if (this.variables == null) {
            this.variables = new HashMap<>();
        }
        this.variables.put(key, value);
        return this;
    }

    /**
     * 批量添加变量
     */
    public TemplateContext addVariables(Map<String, Object> vars) {
        if (this.variables == null) {
            this.variables = new HashMap<>();
        }
        if (vars != null) {
            this.variables.putAll(vars);
        }
        return this;
    }

    /**
     * 获取变量
     */
    @SuppressWarnings("unchecked")
    public <T> T getVariable(String key) {
        return this.variables != null ? (T) this.variables.get(key) : null;
    }

    /**
     * 创建上下文
     */
    public static TemplateContext create(String template) {
        return TemplateContext.builder()
                .template(template)
                .build();
    }

    /**
     * 创建上下文（带变量）
     */
    public static TemplateContext create(String template, Map<String, Object> variables) {
        return TemplateContext.builder()
                .template(template)
                .variables(variables)
                .build();
    }
}

